#pragma once 

//带头结点的双向循环链表

typedef int DataType;

typedef struct DListNode
{
   struct DListNode* next;
   struct DListNode* prev;
   DataType data;
}Node;

//初始化
void DListInit(Node** head); 
//Node表示结构体，Node*表示结构体的地址，Node**表示结构体第一个节点的地址
//head表示结构体中第一个节点的地址，*head表示结构体的地址，**head表示整个结构体


//尾插
void DListPushBack(Node* head, DataType data);

//尾删
void DListPopBack(Node* head);

//头插
void DListPushFront(Node* head, DataType data);

//头删
void DListPopFront(Node* head);

//任意位置的插入
void DListInsert(Node* pos, DataType data);
void DListInsert1(Node* pos, DataType data);

//任意位置的删除
void DListErase(Node* pos);

//获得有效元素的大小
int DListSize(Node* head);

//判空
int DListEmpty(Node* head);

//查找
Node* DListFind(Node* head, DataType data);

//销毁
void DListDestroy(Node** head);

//测试
void DListPrint(Node* head);


